#include <bits/stdc++.h>
#define N 304
#define M (N*N)
#define V (N+N+2)
#define INF 1000000009
using namespace std;
typedef long long ll;

int n, m, Q;
struct Ed { int u, v, w; } ed[M];
int totm, cc[M];
vector <Ed> vec[M];

int S, T, totV, dis[V];
bool inq[V], vst[V];
ll mncst, mxfl;

struct es { int t, w, c, nxt; } e[M+N*2];
int tot=1, hd[V], cur[V];

ll ans[N];

void add (int u, int v, int w, int c)
{
    e[++tot]=(es){ v, w, c, hd[u] };
    hd[u]=tot;
    e[++tot]=(es){ u, 0, -c, hd[v] };
    hd[v]=tot;
}
bool spfa ()
{
    fill(dis+1, dis+totV+1, INF);
    queue <int> q;
    dis[S]=0; q.push(S); inq[S]=1;

    while (!q.empty()) {
        int u=q.front(); q.pop();
        inq[u]=0;
        for (int i=hd[u]; i; i=e[i].nxt) {
            int v=e[i].t, c=e[i].c;
            if (!e[i].w) { continue; }
            if (dis[u]+c<dis[v]) {
                dis[v]=dis[u]+c;
                if (!inq[v]) { q.push(v); inq[v]=1; }
            }
        }
    }
    return dis[T]!=INF;
}
int dfs (int u, int fl)
{
    if (u==T || !fl) { return fl; }

    int res=0;

    vst[u]=1;
    for (int i=cur[u]; i && fl; i=e[i].nxt) {
        cur[u]=i;
        int v=e[i].t, w=e[i].w, c=e[i].c;
        if (!w || dis[v]!=dis[u]+c || vst[v]) { continue; }
        int f=dfs(v, min(fl, w));
        res+=f; fl-=f;
        e[i].w-=f; e[i^1].w+=f;
        mncst+=(ll)f*e[i].c;
    }
    vst[u]=0;

    return res;
}
void Dinic ()
{
    while (spfa()) {
        for (int i=1; i<=totV; i++) { cur[i]=hd[i]; }
        mxfl+=dfs(S, n+1);
    }
}

int main ()
{
    freopen("journey.in", "r", stdin);
    freopen("journey.out", "w", stdout);

    scanf("%d %d %d", &n, &m, &Q);
    for (int i=1; i<=m; i++) {
        int u, v, w; scanf("%d %d %d", &u, &v, &w);
        ed[i]=(Ed){ u, v, w };
        cc[i]=w;
    }

    if (Q==0) { return 0; }

    totm=m; sort(cc+1, cc+totm+1);
    totm=unique(cc+1, cc+totm+1)-(cc+1);
    cc[++totm]=100001;
    for (int i=1; i<=m; i++) {
        int wid=lower_bound(cc+1, cc+totm+1, ed[i].w)-cc;
        vec[wid].push_back(ed[i]);
    }

    S=n+n+1; T=n+n+2; totV=T;
    for (int i=1; i<=n; i++) { add(S, i, 1, 0); add(i+n, T, 1, 0); add(i+n, i, n+1, 0); }

    for (int i=1; i<=n; i++) { ans[i]=INF; }

    for (int i=1; i<=totm; i++) {
        for (int j=0; j<(int)vec[i].size(); j++) {
            int u=vec[i][j].u, v=vec[i][j].v, w=vec[i][j].w;
            add(u, v+n, n+1, w);
            if (mxfl<n) { Dinic(); }
            ans[mxfl]=mncst;
        }
    }

    // for (int i=0; i<=n; i++) { cout<<ans[i]<<" "; } cout<<endl;

    for (int t=1; t<=Q; t++) {
        int C; scanf("%d", &C);
        ll res=INF;
        for (int i=0; i<=n; i++) { res=min(res, (ll)(n-i)*C+ans[i]); }
        printf("%lld\n", res);
    }

    return 0;
}